package com.example.parttimejob.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.parttimejob.mapper.PartTimeJobsMapper;
import com.example.parttimejob.mapper.ReviewsMapper;
import com.example.parttimejob.mapper.StoreMapper;
import com.example.parttimejob.mapper.UserMapper;
import com.example.parttimejob.pojo.entity.Merchants;
import com.example.parttimejob.pojo.entity.PartTimeJobs;
import com.example.parttimejob.pojo.entity.Reviews;
import com.example.parttimejob.pojo.entity.User;
import com.example.parttimejob.pojo.entity.dto.*;
import com.example.parttimejob.pojo.entity.vo.*;
import com.example.parttimejob.service.StoreService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

@Service
public class StoreServiceimpl  implements StoreService {

    @Autowired
    private StoreMapper storeMapper;

    @Autowired
    private PartTimeJobsMapper partTimeJobsMapper;

    @Autowired
    private UserMapper userMapper;
    //注册

    @Autowired
    private ReviewsMapper reviewsMapper;

    @Override
    public String registStore(String merchantUsername, String passwd) {
        Merchants merchants=storeMapper.selectBymerchantUsername(merchantUsername);
        if(merchants!=null) {
            return "用户名已存在!";
        }
        else {
            if (passwd != null) {
                String status = "未实名";
                storeMapper.registStore(merchantUsername, passwd, status);
                return "注册成功";
            } else {
                return "密码不能为空";
            }
        }
    }

    //登录
    @Override
    public int loginStore(String merchantUsername, String passwd) {
        Merchants merchants = storeMapper.selectBymerchantUsername(merchantUsername);
        String password;
        if (merchants == null) {
            //用户名不存在
            return 0;
        } else {
            password = merchants.getPasswd();
        }
        if (password == null) {
            //请输入正确的用户名和密码
            return -1;
        }
        if (password.equals(passwd)) {
            System.out.println(merchants.getMerchantId());
            return merchants.getMerchantId();
        } else {
            //请输入正确的用户名和密码
            return -1;
        }
    }
    //判断商家是否实名
    @Override
    public String SelectStoreStatus(Integer merchantId) {
        return storeMapper.selectStoreStatus(merchantId);
    }


    //根据id查询商户信息
    @Override
    public Merchants getById(Integer id) {
        return storeMapper.getById(id);

    }

    //实名认证
    @Override
    public String IdeafiStore(MerchantsDto merchantsDto) {
//        System.out.println(merchantsDto.getMerchantId());
        Merchants merchants=new Merchants();
        BeanUtils.copyProperties(merchantsDto, merchants);
//        System.out.println(merchantsDto.getMerchantName());
        merchants.setAccountStatus("待管理员审核");
         storeMapper.updateById(merchants);
         return "认证成功";
    }

    //修改之前查询信息
    @Override
    public MerchantsModifyVo SelectModify(Integer merchantId) {
        Merchants merchants=storeMapper.selectById(merchantId);
        MerchantsModifyVo merchantsModifyVo=new MerchantsModifyVo();
        BeanUtils.copyProperties(merchants, merchantsModifyVo);
        return  merchantsModifyVo;
    }

    //商家修改信息
    @Override
    public String ModifyStore(MerchantsModifyDto merchantsModifyDto) {
       String old_passwd=merchantsModifyDto.getPasswd();
        String passwd=storeMapper.selectPasswdById(merchantsModifyDto.getMerchantId());
        Merchants merchants=new Merchants();
        String Message="";
        //包含修改密码和修改信息
        if(passwd.equals(old_passwd))
        {
            merchantsModifyDto.setPasswd(merchantsModifyDto.getNew_passwd());
            BeanUtils.copyProperties(merchantsModifyDto, merchants);
            Message="成功修改密码和信息";
        }
        //密码错误不修改密码只修改信息
        else{
            merchantsModifyDto.setPasswd(passwd);
            BeanUtils.copyProperties(merchantsModifyDto, merchants);
           Message="信息修改成功,修改密码请输入正确的密码";
        }
        storeMapper.updateById(merchants);
       return Message;
    }


    //发布兼职
    @Override
    public String Create(PartTimeJobsDto partTimeJobsDto) {
        PartTimeJobs partTimeJobs=new PartTimeJobs();
        BeanUtils.copyProperties(partTimeJobsDto,partTimeJobs);
        partTimeJobs.setJobStatus("待管理员审核");
        partTimeJobsMapper.insert(partTimeJobs);
        return "发布成功!";
    }

    //根据商户id查询兼职信息
    @Override
    public List<PartTimeJobsVo> PartJob(Integer merchantId) {
        List<PartTimeJobsVo> partTimeJobsVoList=new ArrayList<>();
        // 创建 QueryWrapper 对象
        QueryWrapper<PartTimeJobs> queryWrapper = new QueryWrapper<>();
        // 设置条件，这里假设实体类中的属性为 id
        queryWrapper.eq("merchant_id", merchantId);
       List<PartTimeJobs> partTimeJobs=partTimeJobsMapper.selectList(queryWrapper);
        for (PartTimeJobs partTimeJob : partTimeJobs) {
            PartTimeJobsVo partTimeJobsVo=new PartTimeJobsVo();
            BeanUtils.copyProperties(partTimeJob, partTimeJobsVo);
            String name=userMapper.selectRealByUserId(partTimeJob.getUserId());
            partTimeJobsVo.setRealName(name);
            partTimeJobsVoList.add(partTimeJobsVo);
        }
      return partTimeJobsVoList;
    }



    //商家聘用或不聘用用户或解雇用户
    @Override
    public String CheckUser(CheckUserDto checkUserDto) {
        PartTimeJobs partTimeJobs=new PartTimeJobs();
        BeanUtils.copyProperties(checkUserDto, partTimeJobs);
        partTimeJobsMapper.updateById(partTimeJobs);
        return "操作成功";
    }

    //删除未请求的兼职信息
    @Override
    public String DeleteJob(Integer jobId) {
        partTimeJobsMapper.deleteById(jobId);
       return "删除成功!";
     }

     //修改之前查询
    @Override
    public PartTimeJobsModifyVo SelectModifyJob(Integer jobId) {
        PartTimeJobs partTimeJobs=partTimeJobsMapper.selectById(jobId);
        PartTimeJobsModifyVo partTimeJobsModifyVo=new PartTimeJobsModifyVo();
        BeanUtils.copyProperties(partTimeJobs, partTimeJobsModifyVo);
        return partTimeJobsModifyVo;
    }

    //修改兼职信息
    @Override
    public String ModifyJob(PartTimeJobsModifyDto partTimeJobsModifyDto) {
        PartTimeJobs partTimeJobs=new PartTimeJobs();
        BeanUtils.copyProperties(partTimeJobsModifyDto, partTimeJobs);
        partTimeJobsMapper.updateById(partTimeJobs);
        return "修改成功!";
    }

       //商家评论录取或解雇的兼职（通过兼职表） 管理兼职界面
    @Override
    public String AddReview(AddReviewDto addReviewDto) {
        Reviews reviews=new Reviews();
        BeanUtils.copyProperties(addReviewDto, reviews);
        reviews.setReviewerCategory("商家");
        //设置评论时间
        Date currentDate = new Date();
        reviews.setTimestamps(currentDate);
           //未评价过，插入
        if (reviews.getReviewId()==0) {
            reviews.setReviewId(null);
            reviewsMapper.insert(reviews);
            return "评价成功!";

        }
        //已经评价过，修改
        else
        {
            reviewsMapper.updateById(reviews);
            return "修改成功!";
        }
        }

        //展示给用户
    @Override
    public List<ShowForUser> ShowForUser() {
        List<Merchants> merchantsList=storeMapper.selectList(null);
        List<ShowForUser> showForUserList=new ArrayList<>();
        for (Merchants merchants : merchantsList) {
            ShowForUser showForUser=new ShowForUser();
            BeanUtils.copyProperties(merchants, showForUser);
            QueryWrapper<PartTimeJobs> queryWrapper = new QueryWrapper<>();
            // 设置条件，这里假设实体类中的属性为 id
            queryWrapper.eq("merchant_id", showForUser.getMerchantId()).in("job_status", Arrays.asList("未请求", "待审核"));
           List<PartTimeJobs> partTimeJobsList=partTimeJobsMapper.selectList(queryWrapper);
//            System.out.println(partTimeJobsList);
           if(partTimeJobsList!=null)
           {
               for (PartTimeJobs partTimeJobs : partTimeJobsList) {
                   ShowForUser showForUser1=new ShowForUser();
                   BeanUtils.copyProperties(showForUser, showForUser1);
                       BeanUtils.copyProperties(partTimeJobs,showForUser1);
                       showForUserList.add(showForUser1);
               }
           }
        }
        return showForUserList;
    }

    //类别查询
    @Override
    public List<ShowForUser> SearchStore(String category) {
        List<Merchants> merchantsList=storeMapper.selectList(null);
        List<ShowForUser> showForUserList=new ArrayList<>();
        for (Merchants merchants : merchantsList) {
            ShowForUser showForUser=new ShowForUser();
            BeanUtils.copyProperties(merchants, showForUser);
            QueryWrapper<PartTimeJobs> queryWrapper = new QueryWrapper<>();
            // 设置条件，这里假设实体类中的属性为 id
            if(category.equals("全部")) {
                queryWrapper.eq("merchant_id", showForUser.getMerchantId()).in("job_status", Arrays.asList("未请求", "待审核"));
            }
            else{
                queryWrapper.eq("merchant_id", showForUser.getMerchantId()).in("job_status", Arrays.asList("未请求", "待审核")).eq("category", category);
            }
            List<PartTimeJobs> partTimeJobsList=partTimeJobsMapper.selectList(queryWrapper);
//            System.out.println(partTimeJobsList);
            if(partTimeJobsList!=null)
            {
                for (PartTimeJobs partTimeJobs : partTimeJobsList) {
                    ShowForUser showForUser1=new ShowForUser();
                    BeanUtils.copyProperties(showForUser, showForUser1);
                    BeanUtils.copyProperties(partTimeJobs,showForUser1);
                    showForUserList.add(showForUser1);
                }
            }
        }
        return showForUserList;
    }


}
